package br.com.velp.sudecap.serviceimpl;

import br.com.velp.sudecap.comum.SpringConstants;
import br.com.velp.sudecap.comum.ValidationException;
import br.com.velp.sudecap.dao.SetorDAO;
import br.com.velp.sudecap.dto.ParametrosConsultaDTO;
import br.com.velp.sudecap.entidade.Setor;
import br.com.velp.sudecap.service.SetorService;
import java.util.List;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 03.10.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> N/A </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Pelas 
 *             Operações de CRUD Referentes ao Contexto de Setor 
 * </descricao>
 * </sumario>
 */
@Service("setorService")
@Transactional(readOnly = true)
@Lazy(SpringConstants.LAZY_BEANS)
public class SetorServiceImpl implements SetorService {
    
    public static final Long serialVersionUID = 1l;
    
    @Autowired
    private SetorDAO setorDAO;

    @Override
    @Transactional(readOnly = false)
    public Long salvar(Setor value) throws Exception {
        
        if (this.setorDAO.isSetorJaCadastrado(value)) {
            throw new ValidationException("validacao_setor_ja_cadastrado");
        }
        
        return this.setorDAO.salvar(value);
        
    }

    @Override
    @Transactional(readOnly = false)
    public void atualizar(Setor value) throws Exception {
        
        if (this.setorDAO.isSetorJaCadastrado(value)) {
            throw new ValidationException("validacao_setor_ja_cadastrado");
        }
        
        this.setorDAO.atualizar(value);
        
    }

    @Override
    public Setor obterPorId(Long id) {
        
        return this.setorDAO.obterPorId(id);
        
    }

    @Override
    @Transactional(readOnly = false)
    public void excluir(Setor value) throws Exception {
        
        if (this.setorDAO.isSetorVinculadoCadastro(value)) {
            throw new ValidationException("validacao_setor_vinculado_cadastro_usuario");
        }
        
        this.setorDAO.excluir(value);
        
    }
    
    @Override
    public int contarSetores(ParametrosConsultaDTO parametros) {
        
        return this.setorDAO.contarSetores(parametros);
        
    }
    
    @Override
    public List<Setor> buscarSetoresPaginados(int firstResult, int maxResults, 
            ParametrosConsultaDTO parametros, Order order) {
        
        return this.setorDAO.buscarSetoresPaginados(firstResult, maxResults, parametros, order);
        
    }
    
    @Override
    public List<Setor> buscarTodosSetores(boolean apenasAtivos) {
        
        return this.setorDAO.buscarTodosSetores(apenasAtivos);
        
    }
    
}
